//
// Created by dyc on 25-1-9.
//

#pragma once

#include <opencv2/opencv.hpp>

namespace hitcrt {
    class Detect {
    public:
        Detect() = default;

        ~Detect() = default;

        void detect(cv::Mat &frame);

        void colorDetect();

        void maskProcess(cv::Mat &mask);

        bool findContours();

        void Calculator();

        void getEndPointsImpl(const std::vector<cv::Point> &contour);

        int ContourScreen(std::vector<std::vector<cv::Point>> contours);




        cv::Mat image;
        cv::Mat threshold_image;
        cv::Mat green_mask;

        //颜色阈值
        cv::Scalar maxYellow;
        cv::Scalar minYellow;
        cv::Scalar maxBlue;
        cv::Scalar minBlue;
        cv::Scalar maxBlack;
        cv::Scalar minBlack;
        cv::Scalar maxRed_1;
        cv::Scalar minRed_1;
        cv::Scalar maxRed_2;
        cv::Scalar minRed_2;

        //颜色掩膜
        cv::Mat yellowMask;
        cv::Mat blackMask;
        cv::Mat redMask;
        cv::Mat blueMask;

        //颜色轮廓
        std::vector<std::vector<cv::Point>> contours_red;
        std::vector<std::vector<cv::Point>> contours_blue;
        std::vector<std::vector<cv::Point>> contours_black;
        std::vector<std::vector<cv::Point>> contours_yellow;

        //掩膜的图像形态学处理
        int IF_MASK_PROCESS;
        int MASK_PROCESS_ITERATION;

        //相机内参
        cv::Mat m_cameraMatrix;
        cv::Mat m_distCoeffs;

        //检测标准
        double m_areaMin; // 连通域最小面积
        double m_areaMax; // 连通域最大面积
    private:
    };
} // hitcrt
